package com.buddy.design.pattern._02singleton;

/**
 * 全局没有用到锁关键字
 *
 * 理解内部类的执行逻辑
 * 问题：有可能会被反射攻击
 */
public class LazyInnerClassSingleton {

    private LazyInnerClassSingleton() {
        if (LazyHolder.INSTANCE != null){
            throw new RuntimeException("实例已经存在");
        }
    }


    //需要等到外部方法調用時才执行，巧妙地利用了内部类特性；
    //JVN底层执行逻辑，完美的避免了线程安全问题
    //性能最优的
    public static final LazyInnerClassSingleton getInstance() {
        return LazyHolder.INSTANCE;
    }

    private static class LazyHolder {
        //注意finla
        private static final LazyInnerClassSingleton INSTANCE = new LazyInnerClassSingleton();
    }

}